package cn.kai.process.flow.core;

import cn.kai.json.flow.FlowChainJson;
import cn.kai.process.cache.LFUCache;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.Executor;

/**
 * 最近最不常用未使用 流程引擎
 Author: cKnight
 Date: 2025/2/7
 */
@Slf4j
public class FlowEnginLFU extends AbstractFlowEngine {

    public FlowEnginLFU(int maxSize, Executor executor) {
        super(new LFUCache<>(maxSize), executor);
    }

    /**
     * 初始化方法 用于注册 chain
     */
    public void init() {
        log.info("flowEnginInit被执行了");
    }


    /** 快捷执行 */
    public void exe(String type){
        //从库中获取对应类型的规则
    }

    /** 快捷执行 */
    public <T> T exe(String type,T defaultValue){
        //从库中获取对应类型的规则树
        return null;
    }

    /**
     * 重写 执行方法
     * @param name
     * @param nodeContext
     */
    @Override
    public void execute(String name, NodeContext nodeContext) {
        if (!isExist(name)) {
            //从库中重新获取 todo
            FlowChainJson flowChainJson = new FlowChainJson();
            //执行
            execute(flowChainJson);
        } else {
            execute(name);
        }
    }

    @Override
    public <T> T execute(String name, String resultKey, T defaultValue) {
        if (!isExist(name)) {
            //从库中重新获取 todo
            FlowChainJson flowChainJson = new FlowChainJson();
            //注册一个
            registerChain(flowChainJson);
            return super.execute(name, resultKey, defaultValue);
        } else {
            return super.execute(name, resultKey, defaultValue);
        }
    }
}
